package cn.icare.cms;

import cn.icare.cms.model.ro.*;
import cn.icare.cms.model.vo.rest.ItemVO;
import cn.icare.cms.model.vo.rest.MsgDatasVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 货架Service接口类
 */
public interface ItemService {
    Long createOne(AddItemRO ro, String actionUserName);

    boolean updateOne(EditItemRO ro, String actionUserName);

    boolean deleteOne(Long id);

    boolean deleteBatch(List<Long> ids);

    ItemVO getOne(Long id);

    MsgDatasVO getList(Long cid,String cpath, String code, String name, Integer pageNum, Integer pageSize,Integer isnew,Integer isrecommend);

    /**
     * 商品重复检测，规则，商品编号全库唯一，商品名称同分类下唯一
     * @param id 自增id,新增时为0
     * @param cid 商品分类id
     * @param code 商品编号
     * @param name 商品名称
     * @return
     */
    boolean isExists(Long id,Long cid,String code,String name);

    boolean updateItemStatus(Long id,Integer status);

    boolean updateItemStatusBatch(List<Long> ids,Integer status);

    //#region 前端小程序或APP相关接口

    /***
     * 分页获取商品列表，包含普通商品和促销商品
     * @param areaId 区域Id，必填
     * @param cid
     * @param name
     * @param pageNum
     * @param pageSize
     * @param isHot true-根据销量倒序排序 false-根据商品修改时间倒序排序
     * @param isNew 是否新品 1-查询新品
     * @param isRecommend 是否推荐 1-查询推荐商品
     * @return
     */
    MsgDatasVO getMiniList(Long areaId,Long cid,String name, Integer pageNum, Integer pageSize,boolean isHot,Integer isNew,Integer isRecommend);

    /***
     * 分页获取促销商品列表促销商品
     * @param promId 促销id
     * @param name  商品名称
     * @param pageNum
     * @param pageSize
     * @return
     */
    MsgDatasVO getMiniPromList(Integer promId,String name,Integer pageNum, Integer pageSize);


    /**
     * 获取商品详情信息
     * @param id 商品Id
     * @param areaId 区域Id
     * @return
     */
    ItemDetailVO getItemDetail(Long id,Long areaId,Long memberId);

    BigDecimal getItemPrice(Long id);


    /**
     * 批量修改商品是否新品状态
     * @param ids 商品Id列表
     * @param status 1-是 0-否
     * @return
     */
    boolean updateIsNewBatch(List<Long> ids,Integer status);

    /**
     * 批量修改商品是否推荐状态
     * @param ids 商品Id列表
     * @param status 1-是 0-否
     * @return
     */
    boolean updateIsRecommendBatch(List<Long> ids,Integer status);

    /**
     * 取消某分类下所有新品商品
     * @param cid
     * @return
     */
    boolean cancelIsNewBatch(Long cid);

    /**
     * 取消某分类下所有推荐商品
     * @param cid
     * @return
     */
    boolean cancelIsRecommendBatch(Long cid);


    /**
     * 获取分享商品详情信息
     * @param id 商品Id
     * @return
     */
    ItemDetailVO getShareItemDetail(Long id);

    //#endregion
}
